package top.lingkang.finalvalidated.constraints;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 入参必须在数组某个值中
 * <pre>{@code
 *     // 检查入参必须是 1、2、3 内的数值
 *     @HasIntValue(value = {1, 2, 3}, tag = "类型")
 *     private Integer type;
 * }</pre>
 *
 * @author lingkang
 * created by 2025/11/9 23:17
 * @since 3.0.0
 */
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface HasIntValue {

    /**
     * 必定包含的值
     */
    int[] value() default {};

    /**
     * 校验失败时返回的消息，返回例示 message
     */
    String message() default "";

    /**
     * 校验失败时返回的消息，优先级比 message 低，但是比 @Tag 注解高。返回例示 {tag}不能为空
     */
    String tag() default "";

    /**
     * 分组，不为空时只会定向校验。
     *
     * @since 3.0.0
     */
    Class<?>[] groups() default {};
}
